import axios, {
  type AxiosInstance,
  type AxiosError,
  type AxiosResponse,
  type AxiosRequestHeaders,
} from 'axios';
import storage from 'store';

/* 创建实例 */
const request: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_BASE_API_BASE_URL as string,
  timeout: 30000,
  headers: { 'Content-Type': 'application/json' },
});

/* 异常处理 */
const errorHandler = (error: AxiosError): Promise<never> => {
  if (error.response?.status === 401) {
    console.warn('[axios] 用户未授权或 token 过期');
  }
  return Promise.reject(error);
};

/* 请求拦截 */
request.interceptors.request.use((config:any) => {
  const token = storage.get('token');
  if (token) {
    (config.headers as AxiosRequestHeaders).authorization = token;
  }
  return config;
}, errorHandler);

/* 响应拦截 */
request.interceptors.response.use((res: AxiosResponse) => {
  if (res.data?.code === 't_401') {
    console.warn('[axios] 后端返回 t_401，需要重新登录');
    return Promise.reject(new Error('登录过期'));
  }
  return res.data;          // 直接返回业务数据
}, errorHandler);

/* 两种导出都支持 */
export default request;
export { request as axios };   // 保持你原来的 import { axios } 写法